public class ReverseWordsInString {
    /*
    * 反转字符串中的单词
    * 给你一个字符串 s ，请你反转字符串中 单词 的顺序。
    * 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
    * 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
    * 注意：输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。
    * 返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
    *
    * 1 <= s.length <= 10(4)
    * s 包含英文大小写字母、数字和空格 ' '
    * s 中 至少存在一个 单词
    * */
    public static void main(String[] args){
        ReverseWordsInString reverseWordsInString = new ReverseWordsInString();
        System.out.println(reverseWordsInString.mySolution("abc   bdf  c        ddc  e"));
    }

    // 我的想法：split分割(这下成水题了捏)
    public String mySolution(String s){
        s = s.trim();
        String[] split = s.split("  *");
        StringBuilder builder = new StringBuilder(s.length());
        for (int i = split.length-1; i > 0; i--) {
            builder.append(split[i]);
            builder.append(" ");
        }
        builder.append(split[0]);
        return builder.toString();
    }

    // 指针从尾开始遍历
    public String mySolution1(String s){
        StringBuilder builder = new StringBuilder(s.length());
        for (int i = s.length()-1; i >= 0; i--) {
            if(s.charAt(i) == ' ')
                continue;
            int l = i;
            while (l >= 0 && s.charAt(l) != ' ') l--;
            for (int j = l+1; j <= i; j++) {
                builder.append(s.charAt(j));
            }
            builder.append(" ");
            i = l;
        }
        return builder.substring(0,builder.length()-1);
    }
}
